% !Mode:: "TeX:UTF-8"

\chapter{设计分析}

\section{前言}
\subsection{功能设计具体要求}
\begin{enumerate}
    \item 测温：无需用户或者工作人员操作即可自动测温，方便舒适。
    \item 保存数据：在测量时，系统温度数据，测量地点以及时间对应保存。
    \item 生成数据曲线：系统可以自动生成温度的数据曲线.
    \item 报警：系统拥有正常区域、警告区域、报警区域的三级极限值设定。当测量温度为警告温度区间时，界面显示橙色。处于报警区域时,界面显示红色。当温度超过正常区域时，用户会收到相应警报。
\end{enumerate}
  

\subsection{主要约束及限制}
\begin{enumerate}
    \item 系统响应时间要求：\\系统应具有快速响应的特性，用户打开界面和提交事务的平均响应时间应低于1.5秒。用户进行在线实时查询业务操作的数据处理时间应低于5秒。
    \item 系统可靠性要求：\\系统应具有较高的稳定性，所有环节正常运行的概率；核心系统综合可靠性应满足培训需求。
    \item 系统易用性要求：\\目标系统用户界面应操作简洁、易用、灵活，风格统一。系统的用户帮助文档要求齐备，易于进行软件使用。充分考虑系统的易用性。系统须具有合理的使用成本，有利于用户长期、有效地利用进行体温的测量。
    \item 系统可维护性要求：\\系统具有良好的可维护性，便于日常维护。同时，系统须具有较低的维护成本。
    \item 系统可扩展性要求：\\系统须采用模块化设计，可根据用户的需求不断周期性更新系统设计，可以进行扩展并预留接口，利于以后升级与扩展。
\end{enumerate}

\section{设计思路}

我们的项目采用的是java的springboot作为整体的基本架构，首先我们的产品的创新点是没有采用传统的数据库连接，
而是使用了SharedPreferences来作为数据存储的连接和调用工具。

SharedPreferences这是安卓规定的一个文件格式，可以提供数据存储，存储的对象是字符串。
其主要优点是轻便，因为考虑到在初步APP架构完成之后，我们会进行板子的调试工作，
可能有一些代码或者数据的更改，可能会在之后的行动中有较大的变动，而数据库不灵活，
SharedPreference用数据结构把数据做成了存储json，类似于list 用数据库的话会比较麻烦，
当涉及到修改问题的话，如果使用数据库，安卓本地表每次都得删除在更新，
而SharedPreferences这个就是每次初始化以后再拿出来，十分方便。

APP中的 折线图是github里面的一个open\-source项目，可以直接使用，数据初始化的过程是做了两个list 一个是数值决定曲线，
代表每一次的测温，温度的记录，另一个是destrutron 描述 ，在测温类里面有时间，体温，地点等选项，做的很灵活，
也方便后期可以随意添加。  

地点是百度poi搜索(坐标天津)，输出为关键词，这样的话不会直接显示经纬度，可能对于使用者来说更加灵活。

摄像头权限作为可能项目后期的人脸识别需要调用的接口进行了保留，在本次的项目中并没有很好的展现，其需要安卓6.0动态权限也已经完成，
温度管理的java后台是按照阿里云物联网平台的pop接口文档，通过调用设备所有属性接口，
获取设备属性快照，就是当前时间设备上传的所有自定义信息，写了个springboot框架的接口就可以完成了。

参考文档：

https://lastminuteengineers.com/creating-esp8266-web-server-arduino-ide/


\begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{figures/references}
    \caption{参考文档附图}\label{fig:references}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}


\section{架构设计}
\subsection{总体架构}
前端APP向Java后台发送请求，后台在想云服务器发送请求，然后由云服务器向硬件发送请求，硬件获取到数据后一步步地由云服务器到Java后台最后发送到APP上，然后用户就可以看到所有的数据了。
\begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{figures/UDSF}
    \caption{总体架构}\label{fig:UDSF}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}

\subsection{APP架构}
红外检测APP主要包括三个模块：用户模块、系统模块以及管理模块。其具体架构如下：
\begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{figures/Architecture}
    \caption{APP架构}\label{fig:Architecture}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}

\section{硬件设计}
此次实验所用硬件包括ESP8266和MLX90614传感器。在硬件方面，实现读取传感器获取的温度数据并将其通过WiFi传送阿里云服务器。
\begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{figures/circuit}
    \caption{电路图}\label{fig:circuit}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}

\section{详细设计}
\subsection{体温测量模块}
用户测量体温或环境温度时，系统会计算出用户的实时体温或环境温度，然后系统会将温度、时间、地点对应保存。若用户体温正常，则测温结束；若用户体温过高，系统还会发出警报，然后测温结束。
\subsubsection{处理功能描述}
测量人体温度：由红外线传感器测量人手背的温度。

计算实时温度：由系统对接收到的人体温度进行分析计算，与时间、地点对应保存。
\subsubsection{所需数据}
时间、地点、温度。
\subsubsection{流程图}
\begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{figures/tempFlow}
    \caption{体温测量流程图}\label{fig:tempFlow}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}
\subsubsection{时序图}
\begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{figures/TempSequence}
    \caption{体温测量时序图}\label{fig:temp}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}

\subsection{数据查询模块}
用户可以查询自己测量的实时体温以及历史体温，当用户想要查询数据时，系统会从后台获取数据，然后返回数据信息供用户查看。
\subsubsection{处理功能描述}
查询实时、历史数据：用户查询，系统访问数据，获取实时、历史体温测量的显示，当前值、最大值、最小值，显示对应数值。

查询数据曲线：用户查询温度数据曲线，系统访问数据，获取历史数据，生成数据曲线。
\subsubsection{所需数据}
时间，温度。
\subsubsection{流程图}
\begin{figure}[H]
    \centering
    \includegraphics[width=0.5\textwidth]{figures/dataFlow}
    \caption{数据查询流程图}\label{fig:dataFlow}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}

\subsubsection{时序图}
\begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{figures/DataSequence}
    \caption{数据查询时序图}\label{fig:data}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}

\subsection{高温警告模块}
用户测完体温后，系统会判断温度所在的区间，若处于正常区间，则测温结束；若处于警告区间，则会发出警报，界面显示橙色；若处于报警区间，则会发出警报，界面显示红色。
\subsubsection{处理功能描述}
判断温度是否过高：系统接收到人体温度，计算出实时温度后，判断实时温度在哪一个温度区间。

高温警报：系统判断温度在哪一个区间，如果是正常区间，系统正常显示实时温度；如果在警告温度区间，界面显示橙色；处于报警区域时,界面显示红色。
\subsubsection{所需数据}
时间，温度。
\subsubsection{流程图}
\begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{figures/warningFlow}
    \caption{高温警告流程图}\label{fig:warningFlow}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}
\subsubsection{时序图}
\begin{figure}[H]
    \centering
    \includegraphics[width=1\textwidth]{figures/WarningSequence}
    \caption{高温警告时序图}\label{fig:warning}
    \vspace{\baselineskip} % 表示图与正文空一行
\end{figure}
